package com.bto.solar.work.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.sql.Timestamp;

/**
 * <p>
 * 订单状态表：	订单状态包含多种情况情况	1、当前订单所处于的一个阶段（有些阶段是并行的，有些是依赖），一个订单同时存在多个阶段。阶段是业务上的划分，如何开启，业务代码控制。	2、各个阶段里面的一些状态（客户-待录入、客户-待签约、待踏勘、待设计、踏勘-初审通过、踏勘-总部审批、踏勘-终审 、工程-待分配、来料带录入 等等）。	    	状态数据本质上是对订单的标记，分类查询使用。阶段和状态并不具备耦合关系，只是标记查询的维度不同而已。	业务上允许查询 阶段是A  但是状态是 B阶段的=不存在此类数据		阶段+状态=联合索引=一个订单不存在一个阶段有相同的状态
 * </p>
 *
 * @author adrian
 * @since 2023-08-28
 */
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_state")
@ApiModel(value = "OrderState对象", description = "订单状态表：	订单状态包含多种情况情况	1、当前订单所处于的一个阶段（有些阶段是并行的，有些是依赖），一个订单同时存在多个阶段。阶段是业务上的划分，如何开启，业务代码控制。	2、各个阶段里面的一些状态（客户-待录入、客户-待签约、待踏勘、待设计、踏勘-初审通过、踏勘-总部审批、踏勘-终审 、工程-待分配、来料带录入 等等）。	    	状态数据本质上是对订单的标记，分类查询使用。阶段和状态并不具备耦合关系，只是标记查询的维度不同而已。	业务上允许查询 阶段是A  但是状态是 B阶段的=不存在此类数据		阶段+状态=联合索引=一个订单不存在一个阶段有相同的状态")
public class OrderState implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.INPUT)
    private Long id;

    @ApiModelProperty("订单id")
    private String orderId;

    @ApiModelProperty("订单类型：YH  用户 ZX 整县  ZZD 真租顶")
    private String orderType;

    @ApiModelProperty("订单阶段：	YU_SHEN 预审	KAN__CHA 勘察	SHE_JI 设计	ZZD_SHI_GONG 施工	ZZD_BING_WANG 并网	ZZD_JIE_SUAN 阶段	ZZD_ZHONG_ZHI 终止	ZZD_FINISHED 完成	")
    private String stageId;

    @ApiModelProperty("任务：需要处理的事件，null就是 阶段自身一个任务")
    private String taskId;

    @ApiModelProperty("阶段/任务状态：	事件+状态+动作	eg：	WAITING_FILLED  预审信息待填写	WAITING_INNER_APPROVAL  踏勘信息内审	 	")
    private String stateId;

    @ApiModelProperty("任务排序")
    private Integer sort;

    @ApiModelProperty("公司id")
    private Long companyId;

    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private Timestamp createTime;

    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Timestamp updateTime;
}
